package com.turing.post.antimoney.util;

import java.math.BigInteger;
import java.util.Date;
import java.util.List;

import javax.ejb.Local;
import javax.ejb.Remote;

import com.turing.post.util.PCPSApplicationException;
import com.turing.post.util.PCPSWebInput;

/**
 * 预警信息数据访问接口
 * 
 * @author 李治
 * 
 */
@Remote
@Local
public interface AlarmInfoDao {
	/**
	 * 预警信息插入
	 * 
	 * @param alarmInfo
	 *            预警信息
	 * @throws PCPSApplicationException
	 *             异常信息
	 */
	public void insertAlarmInfo(AlarmInfo alarmInfo)
			throws PCPSApplicationException;

	/**
	 * 预警信息修改
	 * 
	 * @param alarmInfo
	 *            预警信息
	 * @throws PCPSApplicationException
	 *             异常信息
	 */
	public void updateAlarmInfo(AlarmInfo alarmInfo)
			throws PCPSApplicationException;

	/**
	 * 根据主键查询预警信息
	 * 
	 * @param id
	 * @return
	 * @throws PCPSApplicationException
	 */
	public AlarmInfo getAlarmInfoById(BigInteger alarmInfoId);

	/**
	 * 查询指定发卡商定义的预警信息
	 * 
	 * @param issueCompanyNo
	 * @return
	 */
	public List<AlarmInfo> getAllAlarmInfoByIssueCompanyNo(String issceCompanyNo);

	/**
	 * 条件查询预警信息
	 * 
	 * @param issueCompanyNo
	 *            发卡商编号
	 * @param startAlarmTime
	 *            起始预警时间
	 * @param endAlarmTime
	 *            终止预警时间
	 * @param dealStatus
	 *            处理状态
	 * @param pageNo
	 *            页码
	 * @return
	 */
	public List<AlarmInfo> getAlarmInfoByCondition(PCPSWebInput webInput,
			String startAlarmTime, String endAlarmTime, String dealStatus,
			Integer pageNo);

	/**
	 * 条件查询预警信息总数
	 * 
	 * @param issueCompanyNo
	 *            发卡商编号
	 * @param startAlarmTime
	 *            起始预警时间
	 * @param endAlarmTime
	 *            终止预警时间
	 * @param dealStatus
	 *            处理状态
	 * @return
	 */
	public Integer getAlarmInfoCountByCondition(PCPSWebInput webInput,
			String startAlarmTime, String endAlarmTime, String dealStatus);

	/**
	 * @return
	 */
	public BigInteger getMaxAlarmInfoId();

	/**
	 * 可疑交易批量上报选择列表
	 * 
	 * @param webInput
	 * @param alarmRuleId
	 * @param startAlarmTime
	 * @param endAlarmTime
	 * @param page
	 * @return
	 */
	public List<AlarmInfo> getAlarmInfoReportListByCondition(
			PCPSWebInput webInput, BigInteger alarmRuleId,
			String startAlarmTime, String endAlarmTime, Integer page);

	/**
	 * 可疑交易批量上报选择列表数目
	 * 
	 * @param webInput
	 * @param alarmRuleId
	 * @param startAlarmTime
	 * @param endAlarmTime
	 * @return
	 */
	public Integer getAlarmInfoReportTotalByCondition(PCPSWebInput webInput,
			BigInteger alarmRuleId, String startAlarmTime, String endAlarmTime);

	/**
	 * 预付卡业务风险预警表--报表
	 * 
	 * @param webInput
	 * @param branchno
	 *            预警机构
	 * @param startAlarmTime
	 *            预警起始时间
	 * @param endAlarmTime
	 *            预警终止时间
	 * @return list对象
	 */
	public List<Object[]> getAlarmInfoReport(PCPSWebInput webInput,
			Date startAlarmTime, Date endAlarmTime,String dealStatus,String normalOrSuspicious);

	/**
	 * 可疑交易报表--报表
	 * 
	 * @param webInput
	 * @param branchno
	 *            预警机构
	 * @param startTranTime
	 *            交易起始时间
	 * @param endTranTime
	 *            交易终止时间
	 * @return list对象
	 */
	public List<Object[]> getSuspiciousReportList(PCPSWebInput webInput,
			Date startTranTime, Date endTranTime);

	/**
	 * 日常可疑交易报表--报表
	 * 
	 * @param webInput
	 * @param branchno
	 *            预警机构
	 * @param startTranTime
	 *            交易起始时间
	 * @param endTranTime
	 *            交易终止时间
	 * @return list对象
	 */
	public List<Object[]> getSuspiciousReportDayList(PCPSWebInput webInput,
			Date startTranTime, Date endTranTime);

	/**
	 * 根据预警id删除预警
	 * 
	 * @param infoId
	 */
	public void removeAlarmInfoByInfoId(String infoId);
}
